본문으로 건너뛰기

사용자 스레드와 커널 스레드에 대해서 설명해주세요.

사용자 스레드(user-level thread)

사용자 스레드는 커널 영역의 상위에서 지원되며 사용자 레벨의 라이브러리를 통해 구현되며, 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 기능을 제공한다. 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠른 장점이 있는 반면, 여러 개의 사용자 스레드 중 하나의 스레드가 시스템 호출 등으로 중단되면 나머지 스레드 역시 중단된다는 단점이 있다. 이는 커널이 프로세스 내부의 스레드를 인식하지 못하며 해당 프로세스를 대기 상태로 전환시키기 때문이다.

사용자 스레드의 또 다른 단점은 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 떄문에 여러 개의 CPU를 동시에 사용할 수 없다는 점이다. CPU를 여러 개 갖추고 멀티 스레드를 지원하는 경우 스레드를 여러 CPU에 나누어 작업시키는 것이 가능하다. 그러나 커널 입장에서 사용자 스레드는 하나의 프로세스로 인식되므로 작업을 나눌 수 없다.

커널 스레드(kernel-level thread)


커널 스레드는 커널이 멀티 스레드를 지원하는 방시긍로, 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기 때문에 1 to 1 모델이라고 부른다. 커널 스레드는 독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 할 수 있다.

커널 스레드의 장단점은 사용자 스레드의 장단점과 반대라고 생각하면 된다. 커널 스레드는 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있고, 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업할 수 있다. 또한 커널의 기능을 사용하므로 보안에 강하고 안정적으로 작동한다. 하지만 문맥 교환을 할 때 오버헤드 때문에 느리게 작동한다.